package 第2周_排序基础.第一章选择排序法;

import 第1周_线性查找法.测试算法性能.ArrayGenerator;

public class SelectionSort {

    private SelectionSort(){}

    //实现这个接口，就代表这个类是可比较的
    public static <E extends Comparable<E>> void sort(E[] arr){

        for (int i = 0; i < arr.length; i++){
            //选择arr[i---n]的最小值
            int minIndex = i;
            for (int j = i; j < arr.length; j++){
                if (arr[j].compareTo(arr[minIndex]) < 0){
                    minIndex = j;
                }
            }
            swap(arr,i,minIndex);
        }
    }

    private static <E> void swap(E[] arr, int i, int j){
        E temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int n = 10000;
        //因为泛型数组只能接收一个引用类型
        Integer[] arr = ArrayGenerator.generateRandomArray(n,n);
        SortingHelper.sortTest("SelectionSort",arr);
    }

}
